package cc.mrbird.febs.common.service;

import cc.mrbird.febs.system.domain.*;

import java.util.List;

public interface CacheService {

    /**
     * 测试 Redis是否连接成功
     */
    void testConnect() throws Exception;

    /**
     * 从缓存中获取用户
     *
     * @param username 用户名
     * @return User
     */
    User getUser(String username) throws Exception;

    /**
     * 从缓存中获取用户角色
     *
     * @param username 用户名
     * @return 角色集
     */
    List<Role> getRoles(String username) throws Exception;

    /**
     * 从缓存中获取用户权限
     *
     * @param username 用户名
     * @return 权限集
     */
    List<Menu> getPermissions(String username) throws Exception;

    /**
     * 从缓存中获取用户个性化配置
     *
     * @param userId 用户 ID
     * @return 个性化配置
     */
    UserConfig getUserConfig(String userId) throws Exception;

    /**
     * 缓存用户信息，只有当用户信息是查询出来的，完整的，才应该调用这个方法
     * 否则需要调用下面这个重载方法
     *
     * @param user 用户信息
     */
    void saveUser(User user) throws Exception;

    /**
     * 缓存用户信息
     *
     * @param username 用户名
     */
    void saveUser(String username) throws Exception;

    /**
     * 缓存用户角色信息
     *
     * @param username 用户名
     */
    void saveRoles(String username) throws Exception;

    /**
     * 缓存用户权限信息
     *
     * @param username 用户名
     */
    void savePermissions(String username) throws Exception;

    /**
     * 缓存用户个性化配置
     *
     * @param userId 用户 ID
     */
    void saveUserConfigs(String userId) throws Exception;

    /**
     * 删除用户信息
     *
     * @param username 用户名
     */
    void deleteUser(String username) throws Exception;

    /**
     * 删除用户角色信息
     *
     * @param username 用户名
     */
    void deleteRoles(String username) throws Exception;

    /**
     * 删除用户权限信息
     *
     * @param username 用户名
     */
    void deletePermissions(String username) throws Exception;

    /**
     * 删除用户个性化配置
     *
     * @param userId 用户 ID
     */
    void deleteUserConfigs(String userId) throws Exception;
    /**
     * 获取某个部门下的用户
     *
     * @param deptId 部门 ID
     */
    String getUserSubordinates(Long deptId) throws Exception;
    /**
     * 保持某个部门下的用户
     *
     * @param deptId 部门 ID
     * @param permissions 用户 ID
     */
    String saveUserSubordinates(Long deptId,String permissions) throws Exception;
    /**
     * 删除某个部门下的用户缓存
     *
     * @param deptId 部门 ID
     */
    void deleteUserSubordinates(Long deptId) throws Exception;
    /**
     * 获取所有区域缓存
     *
     */
    List<Area> getArea() throws Exception;
    /**
     * 获取所有商铺名称缓存
     *
     */
    List<String> getAllShopName() throws Exception;
    /**
     * 缓存所有商铺名称
     *
     */
    void saveAllShopNames(List<String> shopNames) throws Exception;
    /**
     * 获取所有商铺代码缓存
     *
     */
    List<String> getAllShopCode() throws Exception;
    /**
     * 缓存所有商铺代码
     *
     */
    void saveAllShopCodes(List<String> shopCodes) throws Exception;
    /**
     * 缓存所有区域
     *
     */
    void saveAllAreas(List<Area> areas) throws Exception;
    /**
     * 缓存所有住宅编码
     *
     */
    void saveAllHouseCodes(List<THouse> houseCodes) throws Exception;
    /**
     * 获取所有住宅代码缓存
     *
     */
    List<THouse> getAllHouseCode() throws Exception;
    /**
     * 获取所有户主缓存
     *
     */
    List<TResidentHouse> getAllHouseOwner() throws Exception;
    /**
     * 缓存所有户主
     *
     */
    void saveAllHouseOwner(List<TResidentHouse> houseCodes) throws Exception;
}
